package ru.emms.codemeter.metrics.calculators;

import com.intellij.openapi.diagnostic.Logger;
import com.intellij.psi.PsiAnonymousClass;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiFile;
import com.intellij.psi.util.PsiUtil;
import ru.emms.codemeter.metrics.MetricUtils;

import java.util.Collection;

/**
 * Created by IntelliJ IDEA.
 * User: nastya.kuz
 * Date: 02.08.2010
 * Time: 14:11:01
 *
 * Вычисление метрики "Количество классов"
 * (не абстрактных классов, не перечислений и не интерфейсов)
 */
public class ClassCountMetricCalculator
    implements MetricCalculator {

    private Logger log = Logger.getInstance(getClass().getName());

    /**
     * Вычисляет количество классов (не абстрактных классов, не перечислений и не интерфейсов)
     * для данного списка исходников
     *
     * @param sources коллекция исходников
     * @return число классов
     */
    @Override
    public Long calculate(Collection<PsiFile> sources) {
        Long classCount = 0L;
        for (PsiClass myClass : MetricUtils.getClassesIn(sources)) {
            boolean isRegular = !myClass.isEnum() && !myClass.isInterface() && !PsiUtil.isAbstractClass(myClass) &&
                !(myClass instanceof PsiAnonymousClass);
            if (isRegular) {
                classCount++;
            }
        }
        log.debug("количество простых классов: " + classCount);
        return classCount;
    }

    public String toString() {
        return "CC";
    }
}
